package com.leon.learnenginespace.drools.utils;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class DroolsStringUtil {
    private final static Log cLogger = LogFactory.getLog(DroolsDateUtil.class);

    /**
     * 返回字符串的字节数
     */
    public static int getByteNum(String str) {
        if (StringUtils.isEmpty(str)) {
            return 0;
        }
        try {
            return str.getBytes("GBK").length;
        } catch (Exception e) {
            cLogger.info("字符串“ " + str + " ”GBK解析失败！");
            return 0;
        }
    }

    /**
     * 字符串是否包含中文汉字
     */
    public static boolean containChinese(String str) {
        if (StringUtils.isEmpty(str)) {
            return false;
        }
        char[] chars = str.toCharArray();
        boolean containChinese = false;
        for (char c : chars) {
            if (c >= 0x4E00 && c <= 0x9FA5) {
                //此字符是汉字
                containChinese = true;
                break;
            }
        }
        return containChinese;
    }

    /**
     * 字符串是否全为中文汉字
     */
    public static boolean isAllChinese(String str) {
        if (StringUtils.isEmpty(str)) {
            return false;
        }
        char[] chars = str.toCharArray();
        boolean isAllChinese = true;
        for (char c : chars) {
            if (c < 0x4E00 || c > 0x9FA5) {
                //此字符不是汉字
                isAllChinese = false;
                break;
            }
        }
        return isAllChinese;
    }

    /**
     * 字符串是否包含数字
     */
    public static boolean containNumber(String str) {
        if (StringUtils.isEmpty(str)) {
            return false;
        }
        return str.matches(".*\\d+.*");
    }

    /**
     * 字符串是否全为数字
     */
    public static boolean isAllNumber(String str) {
        if (StringUtils.isEmpty(str)) {
            return false;
        }
        return str.matches("[0-9]*");
    }

    /**
     * 返回字符串中连续出现次数最多字的次数
     * @param str 源字符串
     * @return 次数
     */
    public static int findLongest(String str) {
        //从第一位开始依次向后匹配是否有相同汉字
        //如果出现不相同汉字则中断，下标则从当前位置重新开始
        //用map进行记录，字符当作key，出现的次数作value
        Map<String, Integer> resMap = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            char a = str.charAt(i);
            //此字符不是汉字
            if (a < 0x4E00 || a > 0x9FA5){
                continue;
            }
            int j = i + 1;
            while (j < str.length()) {
                char b = str.charAt(j);
                if (a != b) {
                    break;
                }
                j++;
            }
            resMap.put(String.valueOf(a), j - i);
            i = j - 1;
        }
        return Collections.max(resMap.values());
    }
    /**
     * 判断a是b的百分之几
     */
    public static BigDecimal divide(String a, String b) {
        BigDecimal num1 = new BigDecimal(a);
        BigDecimal num2 = new BigDecimal(b);
        BigDecimal divide = num1.divide(num2,15,BigDecimal.ROUND_HALF_UP);
        return divide;
    }

}
